import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let itemBoxItems = [
    {
        "label": "ItemBox_Create",
        "insertText": dedent`
        GUI:ItemBox_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:img}, \${6:boxindex}, \${7:stdmode})
        `,
        "documentation": dedent`# 创建物品放入框
        [在线文档](http://engine-doc.996m2.com/web/#/22/6833)

        | 参数     | 必选 | 类型                | 注释                                                       |
        | :------- | :--- | :------------------ | :--------------------------------------------------------- |
        | parent   | 是   | obj                 | 父节点对象                                                 |
        | ID       | 是   | string              | 唯一ID                                                     |
        | x        | 是   | int                 | 位置 横坐标                                                |
        | y        | 是   | int                 | 位置 纵坐标                                                |
        | img      | 是   | string              | 放置框底图资源路径                                         |
        | boxindex | 是   | int                 | 放置框 唯一ID                                              |
        | stdmode  | 是   | string/number/table | 允许传入的StdMode (“*”: 所有 、单个用number 、多个用table) |

        `
    },
    {
        "label": "ItemBox_GetItemData",
        "insertText": dedent`
        GUI:ItemBox_GetItemData(\${1:widget}, \${2:boxindex})
        `,
        "documentation": dedent`# 获取对应ID放置框的物品数据
        [在线文档](http://engine-doc.996m2.com/web/#/22/6833)

        | 参数     | 必选 | 类型 | 注释               |
        | :------- | :--- | :--- | :----------------- |
        | widget   | 是   | obj  | 物品放入框控件对象 |
        | boxindex | 是   | int  | 放置框 唯一ID      |

        `
    },
    {
        "label": "ItemBox_RemoveBoxData",
        "insertText": dedent`
        GUI:ItemBox_RemoveBoxData(\${1:widget}, \${2:boxindex})
        `,
        "documentation": dedent`# 清空对应ID放置框的传入数据
        [在线文档](http://engine-doc.996m2.com/web/#/22/6833)

        | 参数     | 必选 | 类型 | 注释               |
        | :------- | :--- | :--- | :----------------- |
        | widget   | 是   | obj  | 物品放入框控件对象 |
        | boxindex | 是   | int  | 放置框 唯一ID      |

        `
    },
    {
        "label": "ItemBox_UpdateBoxData",
        "insertText": dedent`
        GUI:ItemBox_UpdateBoxData(\${1:widget}, \${2:boxindex}, \${3:itemData})
        `,
        "documentation": dedent`# 更新对应ID放置框的物品数据 [3.40.4]
        [在线文档](http://engine-doc.996m2.com/web/#/22/6833)

        | 参数     | 必选 | 类型 | 注释                                          |
        | :------- | :--- | :--- | :-------------------------------------------- |
        | widget   | 是   | obj  | 物品放入框控件对象                            |
        | boxindex | 是   | int  | 放置框 唯一ID                                 |
        | itemData | 否   | tbl  | 填充指定的ItemData数据 [支持版本号3.40.7以上] |

        `
    }
]





export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    itemBoxItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
